<C++> | 您所在的位置:网站首页 › windows和windows server区别 › <C++> |
在平时我们实现上位机和下位机的通讯,很常用的就是基于socket的TCP通讯或者UDP通讯,这里我介绍一下tcp通讯协议。在这里推荐一些socket学习的博客写的挺好的。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ socket大致的整个创建流程 https://www.cnblogs.com/hgwang/p/6074038.html socket的原理和实践 https://blog.csdn.net/dlutbrucezhang/article/details/8577810 1. 头文件的区别 linux下的基本头文件(一般这些就够了) #include #include #include #include #include #include #include #include #include | windows下的基本头文件 #include #pragma comment(lib,"Ws2_32.lib ") 2. 阻塞的形式(important) 不管是linux还是windows,我们默认创建的套接字都是阻塞的,也就是服务器(server)它会等待客户端(client)的连接信号才会继续执行accept()函数。 但是在windows下我们初始服务器参数时,我们需要有些不同。 sockaddr_in service; service.sin_family = AF_INET; //在这里有区别,服务器是linux选择INADDR_ANY,它还是会阻塞的 //但是如果服务器改成了windows,它会继续直接执行bind(),accept()函数,导致服务器不等待客户端的连接信号 //直接进行下去,导致不能即时通讯 service.sin_addr.s_addr = inet_addr("192.168.1.2"); service.sin_addr.s_addr = htonl(INADDR_ANY); service.sin_port = htons(8888);3. 套接字的类型 int server_sockfd = socket(AF_INET,SOCK_STREAM, 0); //linux下是int类型 SOCKET server_sockfd = socket(AF_INET,SOCK_STREAM, 0); //windows下是SOCKET类型4.关闭套接字 close(server_sockfd); //linux cloesesocket(server_sockfd); //windows5. 初始化 //windows需要初始化,linux则不需要 WORD sockVersion = MAKEWORD(2, 2); WSADATA wsaData; if (::WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)//初始化供进程调用的Winsock相关的dll { cout |
CopyRight 2018-2019 实验室设备网 版权所有 |